package schema

import (
	"fmt"
)

// AuthCode 授权码管理
type AuthCode struct {
	ID              int64  `json:"id" bson:"_id" structs:"id"`                                          // 唯一标识(自增ID)
	RecordID        string `json:"record_id" bson:"record_id" structs:"record_id"`                      // 记录内码(uuid)
	Code            string `json:"code" bson:"code" structs:"code"`                                     // 验证码
	EnterpriseID    string `json:"enterprise_id" bson:"enterprise_id" structs:"enterprise_id"`          // 企业ID
	EnterpriseName  string `json:"enterprise_name" bson:"-" structs:"enterprise_name"`                  // 企业名称
	CodeType        string `json:"code_type" bson:"code_type" structs:"code_type"`                      // 认证码类型(30:企业普通员工 40:企业管理员)
	EffectiveMode   int    `json:"effective_mode" bson:"effective_mode" structs:"effective_mode"`       // 生效方式(1:时间 2:次数)
	EffectiveNumber int    `json:"effective_number" bson:"effective_number" structs:"effective_number"` // 有效次数
	UsedNumber      int    `json:"used_number" bson:"used_number" structs:"used_number"`                // 使用次数
	EffectiveStart  int64  `json:"effective_start" bson:"effective_start" structs:"effective_start"`    // 有效开始日期
	EffectiveEnd    int64  `json:"effective_end" bson:"effective_end" structs:"effective_end"`          // 有效结束日期
	Status          int    `json:"status" bson:"status" structs:"status"`                               // 状态(1:有效 2:作废)
	Creator         string `json:"creator" bson:"creator" structs:"creator"`                            // 创建人
	Created         int64  `json:"created" bson:"created" structs:"created"`                            // 创建时间戳
	Deleted         int64  `json:"deleted" bson:"deleted" structs:"deleted"`                            // 删除时间戳
}

// Validate 参数校验
func (a *AuthCode) Validate() error {
	if a.CodeType == "" ||
		a.EffectiveMode == 0 {
		return fmt.Errorf("无效的参数")
	}
	return nil
}

// AuthHistory 授权历史
type AuthHistory struct {
	ID       int64  `json:"id" bson:"_id" structs:"id"`                     // 唯一标识(自增ID)
	CodeID   string `json:"code_id" bson:"code_id" structs:"code_id"`       // 授权码ID
	UserID   string `json:"user_id" bson:"user_id" structs:"user_id"`       // 认证用户
	RealName string `json:"real_name" bson:"real_name" structs:"real_name"` // 真实姓名
	Post     string `json:"post" bson:"post" structs:"post"`                // 职务
	Created  int64  `json:"created" bson:"created" structs:"created"`       // 创建时间戳
	Deleted  int64  `json:"deleted" bson:"deleted" structs:"deleted"`       // 删除时间戳
}

// Validate 参数校验
func (a *AuthHistory) Validate() error {
	if a.CodeID == "" ||
		a.RealName == "" ||
		a.Post == "" {
		return fmt.Errorf("无效的参数")
	}
	return nil
}

// AuthCodeQueryParam 授权码查询参数
type AuthCodeQueryParam struct {
	Code           string // 验证码
	EnterpriseID   string // 企业ID
	CodeType       string // 认证码类型(30:企业普通员工 40:企业管理员)
	EffectiveMode  int    // 生效方式(1:时间 2:次数)
	EffectiveStart int64  // 有效开始日期
	EffectiveEnd   int64  // 有效结束日期
	Status         int    // 状态(1:有效 2:作废)
	LastID         int64  // 最后一条数据的ID(用作移动端分页)
}

// AuthCodeQueryResult 授权码查询结果
type AuthCodeQueryResult struct {
	ID              int64  `json:"id" bson:"_id" structs:"id"`                                          // 唯一标识(自增ID)
	RecordID        string `json:"record_id" bson:"record_id" structs:"record_id"`                      // 记录内码(uuid)
	Code            string `json:"code" bson:"code" structs:"code"`                                     // 验证码
	EnterpriseID    string `json:"enterprise_id" bson:"enterprise_id" structs:"enterprise_id"`          // 企业ID
	EnterpriseName  string `json:"enterprise_name" bson:"-" structs:"enterprise_name"`                  // 企业名称
	CodeType        string `json:"code_type" bson:"code_type" structs:"code_type"`                      // 认证码类型(30:企业普通员工 40:企业管理员)
	EffectiveMode   int    `json:"effective_mode" bson:"effective_mode" structs:"effective_mode"`       // 生效方式(1:时间 2:次数)
	EffectiveNumber int    `json:"effective_number" bson:"effective_number" structs:"effective_number"` // 有效次数
	UsedNumber      int    `json:"used_number" bson:"used_number" structs:"used_number"`                // 使用次数
	EffectiveStart  int64  `json:"effective_start" bson:"effective_start" structs:"effective_start"`    // 有效开始日期
	EffectiveEnd    int64  `json:"effective_end" bson:"effective_end" structs:"effective_end"`          // 有效结束日期
	Status          int    `json:"status" bson:"status" structs:"status"`                               // 状态(1:有效 2:作废)
	Created         int64  `json:"created" bson:"created" structs:"created"`                            // 创建时间戳
}

// AuthHistoryQueryParam 授权历史查询参数
type AuthHistoryQueryParam struct {
	CodeID     string // 授权码ID
	LastID     int64  // 最后一条数据的ID(用作移动端分页)
	RealName   string // 真实姓名
	Tel        string // 手机号
	QueryValue string // 模糊查询(真实姓名、手机号)
}

// AuthHistoryQueryResult 授权历史查询结果
type AuthHistoryQueryResult struct {
	ID        int64       `json:"id" bson:"_id" structs:"id"`                     // 唯一标识(自增ID)
	UserID    string      `json:"user_id" bson:"user_id" structs:"user_id"`       // 认证用户
	RealName  string      `json:"real_name" bson:"real_name" structs:"real_name"` // 真实姓名
	Post      string      `json:"post" bson:"post" structs:"post"`                // 职务
	Nickname  string      `json:"nickname" bson:"nickname" structs:"nickname"`    // 昵称
	Tel       string      `json:"tel" bson:"tel" structs:"tel"`                   // 手机号
	Gender    int         `json:"gender" bson:"gender" structs:"gender"`          // 性别(1:男 2:女)
	Created   int64       `json:"created" bson:"created" structs:"created"`       // 创建时间戳
	AuthUsers []*AuthUser `json:"-" bson:"auth_users" structs:"-"`                // 关联用户
}
